# asr_factory.py 或 utils.py

from typing import Dict
from .asr_registry import asr_registry

# 缓存已创建的实例
_asr_instances: Dict[str, object] = {}

def get_or_create_asr_instance(asr_type_name: str = "whisper", reuse_existing: bool = True):
    """
    获取 ASR 实例（带缓存，避免重复加载模型）
    asr_type_name: ASR 类型名称
    reuse_existing: 是否重用已存在的实例
    这个函数可以被API调用。
    """
    # 如果已存在，直接返回
    if reuse_existing and asr_type_name in _asr_instances:
        return _asr_instances[asr_type_name]

    # 否则创建并缓存
    cls = asr_registry.get(asr_type_name)
    if cls is None:
        print(f"[ASR] 未找到类型为 '{asr_type_name}' 的 ASR 类")
        return None

    # 如果之前有旧实例，可选择释放资源（如果支持）
    old_instance = _asr_instances.get(asr_type_name)
    if hasattr(old_instance, "cleanup"):
        old_instance.cleanup() # type: ignore

    print(f"[ASR] 正在创建新实例: {asr_type_name}")
    instance = cls()
    _asr_instances[asr_type_name] = instance  # 缓存
    return instance

def get_available_asr_list():
    """
    获取所有已注册的ASR服务列表。
    这个函数可以被API调用。
    """
    return list(asr_registry.keys())